//
//  BAOAuthModel.swift
//  BAweibo
//
//  Created by baggio on 2017/8/13.
//  Copyright © 2017年 baggio. All rights reserved.
//

import UIKit

//Model 一定要继承 NSObject 类
//如果要归档，就要实现 NSCoding 协议
class BAOAuthModel: NSObject, NSCoding{
    
    var access_token:String? //用户授权的唯一票据
    var expires_in:Int=0 {//access_token的生命周期，单位是秒数，还有多少秒过期。接口文档写错了，不是String
        didSet{
            //typealias TimeInterval = Double
            expires_date = Date().addingTimeInterval(TimeInterval(expires_in))
        }
    }
    
    //expires_in 用起来不方便，所以再定义一个失效时间 expires_Date，当前时间+expires_in
    var expires_date:Date?
    var uid:String? //授权用户的UID，本字段只是为了方便开发者，减少一次user/show接口调用而返回的
    
    //用户信息，加2个属性
    var screen_name:String? //昵称
    var avatar_large:String? //头像
    
    //类似 java 中 Object 类中的 toString()
    override var description: String{
        let keys=["access_token","expires_in","expires_date","uid","screen_name","avatar_large"]
        return dictionaryWithValues(forKeys: keys).description
    }
    
    //用 YYModel 什么都不用做，只要定义好属性就可以了
    
//    // 用 KVC
//    init(dict:[String:Any]){
//        super.init()
//        
//        setValuesForKeys(dict)
//    }
//    
//    // 用 KVC 必须要重写这个方法，防止有些 key 没有 value 而报错
//    override func setValue(_ value: Any?, forUndefinedKey key: String) {
//    }
    
    
    
    //用 YYModel 归档/解档
    //归档（对象转二进制，保存到磁盘）
    func encode(with aCoder: NSCoder) {
        yy_modelEncode(with: aCoder)
    }
    
    //解档（从磁盘获取二进制，转对象）
    required init?(coder aDecoder: NSCoder) {
        super.init()
        
        yy_modelInit(with: aDecoder)
    }
//
    //有required init?(coder aDecoder: NSCoder)，必须要重写 init()，否则会报错 fatal error: use of unimplemented initializer 'init()'
    override init() {
        super.init()
    }

    
//    //不用 YYModel 归档/解档，需要把每个字段都写出来，比较麻烦
//    func encode(with aCoder: NSCoder) {
//        aCoder.encode(access_token, forKey: "access_token")
//        aCoder.encode(expires_in, forKey: "expires_in")
//        aCoder.encode(uid, forKey: "uid")
//        aCoder.encode(screen_name, forKey: "screen_name")
//        aCoder.encode(avatar_large, forKey: "avatar_large")
//    }
//    
//    required init?(coder aDecoder: NSCoder) {
//        access_token=aDecoder.decodeObject(forKey: "access_token") as? String
//        expires_in=aDecoder.decodeObject(forKey: "expires_in") as! Int
//        uid=aDecoder.decodeObject(forKey: "uid") as? String
//        screen_name=aDecoder.decodeObject(forKey: "screen_name") as? String
//        avatar_large=aDecoder.decodeObject(forKey: "avatar_large") as? String
//    }
    
}
